﻿using System;
using System.Collections.Generic;
using System.Linq;
using MIAP.DataAccess.Interfaces;
using MIAP.Entidades;

namespace MIAP.Negocio
{
    /// <summary>
    /// Clase que contiene las operaciones de negocio para la Administración de los proyectos.
    /// </summary>
    public class AdministrarProyectosNegocio
    {
        /// <summary>
        /// Instancia para el acceso a datos de Administración de Proyectos.
        /// </summary>
        private readonly IProyectosDao daoProyectos;

        #region Constructor

        /// <summary>
        /// Inicializa una nueva instancia <see cref="AdministrarProyectosNegocio"/>
        /// </summary>
        public AdministrarProyectosNegocio()
        {
            this.daoProyectos = DataAccessFactory.Instance.CreateProyectosDao();
        }

        #endregion

        #region Metodos

        /// <summary>
        /// Obtiene la información de todos los proyectos.
        /// </summary>
        /// <returns>Lista con la información de todos los proyectos.</returns>
        public List<ProyectoInfo> GetProyectos()
        {
            List<ProyectoInfo> listaProyecto =  this.daoProyectos.GetProyectos().ToList();

            return listaProyecto;
        }
        
        /// <summary>
        /// Obtiene la información del proyecto de acuerdo a los filtros (nombre, estatus).
        /// </summary>
        /// <param name="nombreProyecto">Nombre del proyecto.</param>
        /// <param name="estatus">Estatus del proyecto.</param>
        /// <returns>Lista con la información de los proyectos obtenidos de acuerdo a los filtros.</returns>
        public List<ProyectoInfo> GetProyectosByFilters(string nombre, bool? estatus)
        {
            return this.daoProyectos.GetProyectos(nombre, estatus).ToList();
        }

        /// <summary>
        /// Obtiene la información de un proyecto dependiendo del id.
        /// </summary>
        /// <param name="idProyecto">Es el id del proyecto del cual se obtendrá la información.</param>
        /// <returns>Información del proyecto.</returns>
        public ProyectoInfo GetProyectoById(int idProyecto)
        {
            return this.daoProyectos.GetProyectoById(idProyecto);
        }

        /// <summary>
        /// Cambia el estatus del proyecto  
        /// </summary>
        /// <param name="idProyecto">id del proyecto a cambiar el estatus</param>
        /// <param name="estatus">true si se requiere activar false en caso contrario</param>
        public void ChangeEstatusProyecto(int idProyecto, bool estatus)
        {
            this.daoProyectos.ChangeEstatusProyecto(idProyecto,estatus);
        }

        /// <summary>
        /// Obtiene el id y la descripción de todos los proyectos.
        /// </summary>
        /// <returns>Lista con los ids y descripciones de todos los proyectos.</returns>
        public List<CatalogoInfo> GetCatalogProyecto()
        {
            return this.daoProyectos.GetCatalogProyecto().ToList();
        }
        #endregion
    }
}
